package com.gymmsystem.GYMMSystem.service;

import com.gymmsystem.GYMMSystem.entity.User;

import java.util.List;

public interface UserService {
    /**
     * 用户登录
     */
    User login(String mobile, String password);

    /**
     * 用户注册
     */
    boolean register(User user);

    /**
     * 根据ID获取用户信息
     */
    User getUserById(Long userId);

    /**
     * 更新用户昵称
     */
    boolean updateUserNickname(Long userId, String nickname);

    /**
     * 检查手机号是否已存在
     */
    boolean checkMobileExists(String mobile);

    /**
     * 获取用户排行榜（按积分降序排序）
     */
    List<User> getUserRanking();

    /**
     * 新增：更新用户积分和剩余天数
     */
    boolean updateUserInfo(Long userId, Integer points, Integer remainingDays);

    /**
     * 新增：删除用户
     */
    boolean deleteUser(Long userId);
    
    /**
     * 新增：更新用户完整信息
     * @param userId 用户ID
     * @param nickname 昵称
     * @param mobile 手机号
     * @param oldPassword 原密码（用于验证）
     * @param newPassword 新密码（可选）
     * @return 是否更新成功
     */
    boolean updateUserProfile(Long userId, String nickname, String mobile, String oldPassword, String newPassword);
    
    /**
     * 验证用户密码
     * @param userId 用户ID
     * @param password 密码
     * @return 密码是否正确
     */
    boolean verifyPassword(Long userId, String password);

    String getUserLevel(Long userId);
    boolean canUserReserveCourse(Long userId, String courseGrade);
    
    /**
     * 叠加用户积分和剩余天数
     * @param userId 用户ID
     * @param addPoints 要添加的积分
     * @param addDays 要添加的天数
     * @return 是否更新成功
     */
    boolean addUserPointsAndDays(Long userId, Integer addPoints, Integer addDays);
}